package com.itheima.dubbo.service;

import com.itheima.dubbo.User;
import com.itheima.dubbo.UserFace;
import org.apache.dubbo.config.annotation.DubboService;
import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.rpc.RpcContext;
import org.springframework.beans.factory.annotation.Value;


@DubboService   //dubbo标识服务提供方注解

//@DubboService(version = "${dubbo.application.version}")    //灰度发布-多版本

//@DubboService(retries = 0)   //重试次数  默认为2。 0：表示不重试
//幂等：http请求时，不管调用几次，结果都一样
//非幂等：http请求时，不管调用几次，结果都变化
//get请求（查询幂等）  post请求（新增非幂等）   put请求（表单修改是幂等的，set修改操作非幂等）   delete请求（删除幂等）

//@DubboService(methods = {
//        @Method(name = "add",retries = 0)  ////这里add是一个新增的方法,重试次数为零次，可以将非幂等改为幂等
//})

//建议：设置重试次数最多不要超过2次,一般设置0或1

//@DubboService(timeout = 1000)      //【提供方】超时时间注解配置--接口级别

//@DubboService(methods = {            //【提供方】方法级别
//        @Method(name = "getById",timeout = 1800)
//})
public class UserFaceImpl implements UserFace {


    @Override
    public String hello(String username) {
        return "hello dubbo username:"+username;
    }


    @Value("${server.port}")
    private Integer port;

    @Override
    public User getById(User user) {
        User userReult = new User(user.getId(), "上海黑马程序员", 18);


        System.out.println("测试重试次数......"+port);


        //获取隐式参数
        String idname = RpcContext.getContext().getAttachment("idname");
        System.out.println(idname);
        // ....业务 执行时间很长

        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        return userReult;
    }
}
